package wwl.lsf.hellospringboot.test.算法;

public class 两数相加 {

  public static void main(String[] args) {

    ListNode l1 = new ListNode(5);
    l1.next = new ListNode(5);
    l1.next.next = new ListNode(5);
    ListNode l2 = new ListNode(5);
    l2.next = new ListNode(5);
    l2.next.next = new ListNode(5);
    ListNode listNode = add(l1, l2);
    System.out.println(listNode.val);


  }

  public static ListNode add(ListNode l1, ListNode l2) {
    ListNode result = new ListNode(0);
    ListNode currNode = result;
    int jinwei = 0;

    while (l1 != null || l2 != null) {
      int l1Value = l1 == null ? 0 : l1.val;
      int l2Value = l2 == null ? 0 : l2.val;
      int i = jinwei + l1Value + l2Value;
      jinwei = i / 10;
      currNode.next = new ListNode(i % 10);
      currNode = currNode.next;
      if (l1 != null) {
        l1 = l1.next;
      }
      if (l2 != null) {
        l2 = l2.next;
      }
    }
    if (jinwei > 0) {
      currNode.next = new ListNode(jinwei);
    }

    return result.next;
  }


  public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    ListNode dummyHead = new ListNode(0);
    ListNode p = l1, q = l2, curr = dummyHead;
    int carry = 0;
    while (p != null || q != null) {
      int x = (p != null) ? p.val : 0;
      int y = (q != null) ? q.val : 0;
      int sum = carry + x + y;
      carry = sum / 10;
      curr.next = new ListNode(sum % 10);
      curr = curr.next;
      if (p != null) {
        p = p.next;
      }
      if (q != null) {
        q = q.next;
      }
    }
    if (carry > 0) {
      curr.next = new ListNode(carry);
    }
    return dummyHead.next;
  }
}
